using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Decisions.HL7.Message;
using DecisionsFramework;

namespace Decisions.HL7.Message
{
    public class EncodingAttribute:RuleAttribute
    {
        private Dictionary<HL7Version, string[]> validVersionCodes = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, string[]> validVersionDescriptions = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, HL7TableType> tableVersionTypes = new Dictionary<HL7Version, HL7TableType>();

        public EncodingAttribute()
        {
            // init the values for table version types
						tableVersionTypes[HL7Version.v23] = HL7TableType.User;
						tableVersionTypes[HL7Version.v231] = HL7TableType.HL7;
						tableVersionTypes[HL7Version.v24] = HL7TableType.HL7;
						tableVersionTypes[HL7Version.v25] = HL7TableType.HL7;
						tableVersionTypes[HL7Version.v251] = HL7TableType.HL7;
						tableVersionTypes[HL7Version.v26] = HL7TableType.HL7;
						tableVersionTypes[HL7Version.v27] = HL7TableType.HL7;
			
            
			// init the values for version codes
						validVersionCodes[HL7Version.v23] = new string[]{""};
						validVersionCodes[HL7Version.v231] = new string[]{"A","Hex","Base64"};
						validVersionCodes[HL7Version.v24] = new string[]{"A","Hex","Base64"};
						validVersionCodes[HL7Version.v25] = new string[]{"A","Hex","Base64"};
						validVersionCodes[HL7Version.v251] = new string[]{"A","Hex","Base64"};
						validVersionCodes[HL7Version.v26] = new string[]{"A","Hex","Base64"};
						validVersionCodes[HL7Version.v27] = new string[]{"A","Hex","Base64"};
			
			// init the values for version descriptions
						validVersionDescriptions[HL7Version.v23] = new string[]{""};
						validVersionDescriptions[HL7Version.v231] = new string[]{"no encoding - data are displayable ASCII characters.","hexadecimal encoding - consecutive pairs of hexadecimal digits represent consecutive single octets.","encoding as defined by MIME (Multipurpose Internet Mail Extensions) standard RFC 1521.  Four consecutive ASCII characters represent three consecutive octets of binary data.  Base64 utilizes a 65-character subset of US-ASCII, consisting of both the upper a"};
						validVersionDescriptions[HL7Version.v24] = new string[]{"No encoding - data are displayable ASCII characters.","Hexadecimal encoding - consecutive pairs of hexadecimal digits represent consecutive single octets.","Encoding as defined by MIME (Multipurpose Internet Mail Extensions) standard RFC 1521.  Four consecutive ASCII characters represent three consecutive octets of binary data.  Base64 utilizes a 65-character subset of US-ASCII, consisting of both the upper a"};
						validVersionDescriptions[HL7Version.v25] = new string[]{"No encoding - data are displayable ASCII characters.","Hexadecimal encoding - consecutive pairs of hexadecimal digits represent consecutive single octets.","Encoding as defined by MIME (Multipurpose Internet Mail Extensions) standard RFC 1521. Four consecutive ASCII characters represent three consecutive octets of binary data. Base64 utilizes a 65-character subset of US-ASCII, consisting of both the upper and"};
						validVersionDescriptions[HL7Version.v251] = new string[]{"No encoding - data are displayable ASCII characters.","Hexadecimal encoding - consecutive pairs of hexadecimal digits represent consecutive single octets.","Encoding as defined by MIME (Multipurpose Internet Mail Extensions) standard RFC 1521. Four consecutive ASCII characters represent three consecutive octets of binary data. Base64 utilizes a 65-character subset of US-ASCII, consisting of both the upper and"};
						validVersionDescriptions[HL7Version.v26] = new string[]{"No encoding - data are displayable ASCII characters.","Hexadecimal encoding - consecutive pairs of hexadecimal digits represent consecutive single octets.","Encoding as defined by MIME (Multipurpose Internet Mail Extensions) standard RFC 1521. Four consecutive ASCII characters represent three consecutive octets of binary data. Base64 utilizes a 65-character subset of US-ASCII, consisting of both the upper and"};
						validVersionDescriptions[HL7Version.v27] = new string[]{"No encoding - data are displayable ASCII characters.","Hexadecimal encoding - consecutive pairs of hexadecimal digits represent consecutive single octets.","Encoding as defined by MIME (Multipurpose Internet Mail Extensions) standard RFC 1521. Four consecutive ASCII characters represent three consecutive octets of binary data. Base64 utilizes a 65-character subset of US-ASCII, consisting of both the upper and"};
			            

        }

        
        public override ValidationIssue[] RunRule(string name, object owningObject, object value)
        {
            //todo: check if the value is valid in the current version
            //if the value is not valid in the current version, add it as a validation issue


            return new ValidationIssue[0];
        }
    }
}
